package com.woniu.teachmall.controller;

import com.woniu.teachmall.config.Validator;
import com.woniu.teachmall.entity.User;
import com.woniu.teachmall.service.UserService;
import jakarta.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;

/**
 * 用户管理控制器
 * 处理用户登录、注销、注册等相关请求
 * 基础路径：/user
 */
@Controller
@RequestMapping("/user")
public class UserController {
    // 用户服务层接口，用于处理业务逻辑
    @Autowired
    private UserService userService;

    /**
     * 跳转至用户登录页面
     * @return 返回登录视图模板路径
     */
    @GetMapping("/login")
    public String login() {
        return "login";
    }

    /**
     * 处理用户注销请求
     * 1. 清除session中的登录信息
     * 2. 调用服务层记录注销状态
     * @param session HTTP会话对象
     * @return 重定向到登录页面
     */
    @GetMapping("/logout")
    public String logout(HttpSession session) {
        // 从会话中获取已登录用户信息
        User user = (User) session.getAttribute("loginUser");
        Integer id = user.getId();
        // 清除会话中的用户数据
        session.removeAttribute("loginUser");
        // 调用服务层处理注销业务
        userService.logout(id);
        return "redirect:/user/login";
    }

    /**
     * 处理用户登录表单提交
     * @param account 用户账号
     * @param password 用户密码
     * @param session HTTP会话对象
     * @return 登录成功跳转首页，失败返回登录页
     */
    @PostMapping("/login")
    public String login(
            @RequestParam String account,
            @RequestParam String password,
            HttpSession session) {
        // 调用服务层验证用户凭证
        User user = userService.login(account, password);
        if (user == null) {
            // 登录失败，重定向到登录页面
            return "redirect:/user/login";
        } else {
            // 登录成功，将用户对象存入会话
            session.setAttribute("loginUser", user);
            return "redirect:/";  // 跳转至网站首页
        }
    }

    /**
     * 跳转至用户注册页面
     * @return 返回注册视图模板路径
     */
    @GetMapping("/register")
    public String register() {
        return "register";
    }

    /**
     * 处理用户注册请求
     * @param account 用户账号
     * @param password 用户密码
     * @param telphone 联系电话
     * @param email 电子邮箱
     * @param avatar 用户头像文件
     * @return 注册结果（success/fail）
     * @throws IOException 处理文件上传可能抛出的异常
     */
    @PostMapping("/register")
    @ResponseBody
    public String register(
            @RequestParam String account,
            @RequestParam String password,
            @RequestParam String telphone,
            @RequestParam String email,
            @RequestPart("avatar") MultipartFile avatar) throws IOException {
        // 验证账号密码格式是否符合规范
        if (!Validator.validateAccount(account) || !Validator.validatePassword(password)) {
            return "fail:用户名或密码不符合要求";
        }
        // 调用服务层执行用户注册
        boolean result = userService.insertUser(account, password, telphone, email, avatar);
        return result ? "success" : "fail";
    }
}